package com.netx.ebs;
import java.util.Map;
import java.util.HashMap;
import java.util.List;

import com.netx.generics.basic.Checker;
import com.netx.generics.util.Tools;


public class TemplateValues {

	private final Map<String,String> _values;
	private final Map<String,List<TemplateValues>> _lists;
	
	public TemplateValues() {
		_values = new HashMap<String,String>();
		_lists = new HashMap<String,List<TemplateValues>>();
	}
	
	public TemplateValues put(String name, String value, boolean asHtml) {
		return _put(name, value, asHtml);
	}

	public TemplateValues put(String name, String value) {
		return _put(name, value, false);
	}

	public TemplateValues put(String name, boolean value) {
		return _put(name, value+"", false);
	}

	public TemplateValues put(String name, char value) {
		return _put(name, value+"", false);
	}

	public TemplateValues put(String name, byte value) {
		return _put(name, value+"", false);
	}

	public TemplateValues put(String name, short value) {
		return _put(name, value+"", false);
	}

	public TemplateValues put(String name, int value) {
		return _put(name, value+"", false);
	}

	public TemplateValues put(String name, long value) {
		return _put(name, value+"", false);
	}

	public TemplateValues put(String name, float value) {
		return _put(name, value+"", false);
	}

	public TemplateValues put(String name, double value) {
		return _put(name, value+"", false);
	}

	public TemplateValues putCheckBox(String name, boolean value) {
		return _put(name, value ? "checked" : "", false);
	}

	public TemplateValues putOptionValue(String name, boolean value) {
		return _put(name, value ? "selected" : "", false);
	}

	public TemplateValues putOptionValues(String name, String options, char value) {
		Checker.checkNull(name, "name");
		Checker.checkNull(options, "options");
		for(int i=0; i<options.length(); i++) {
			_put(name+options.charAt(i), value == options.charAt(i) ? "selected" : "", false);
		}
		return this;
	}

	public TemplateValues putRadioButton(String name, String options, char value) {
		Checker.checkNull(name, "name");
		Checker.checkNull(options, "options");
		for(int i=0; i<options.length(); i++) {
			_put(name+options.charAt(i), value == options.charAt(i) ? "checked" : "", false);
		}
		return this;
	}

	public TemplateValues putList(String name, List<TemplateValues> values) {
		Checker.checkNull(name, "name");
		Checker.checkNull(values, "values");
		_lists.put(name.toLowerCase(), values);
		return this;
	}

	// for Template:
	String getValue(String name) {
		return (String)_values.get(name.toLowerCase());
	}
	
	// for Template:
	List<TemplateValues> getList(String name) {
		return (List<TemplateValues>)_lists.get(name.toLowerCase());
	}
	
	private TemplateValues _put(String name, String value, boolean asHtml) {
		Checker.checkEmpty(name, "name");
		value = (value==null) ? "" : (asHtml ? Tools.toHTML(value) : value);
		_values.put(name.toLowerCase(), value);
		return this;
	}
}
